package com.common.widget;

import android.app.Activity;
import android.app.Dialog;
import android.graphics.Typeface;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.common.StarAppConfig;
import com.common.StarAppConst;
import com.common.utils.StarAppUtils;
import com.starappallcommon.R;

/**
 * 共通，选择弹出框
 * 
 * <br>
 * Created 2014-5-5 下午2:30:23
 * 
 * @version
 * @author HuangYK
 * 
 * @see
 */
public class CommonSelectDialog extends Dialog {

	/** 选择图片类型 */
	public static final int TYPE_SELECT_PICTURE = 0x100;
	/** 单选类型 */
	public static final int TYPE_SELECT_RADIO = 0x101;
	/** 三个按钮类型 */
	public static final int TYPE_THREE_BUTTON = 0x102;

	/** 对话框类型 {@link #TYPE_SELECT_PICTURE} or {@link #TYPE_SELECT_RADIO} */
	private int mType = TYPE_SELECT_PICTURE;

	/** Title区域 */
	private RelativeLayout mRlDlgTitle;

	/** 标题文字 */
	private TextView mTvTitle;

	/** 第一个按钮 */
	private RelativeLayout mRlBtnItem1;
	/** 第一个按钮中的图标 */
//	private ImageView mIvBtnItem1Icon;
	/** 第一个按钮中的文字 */
	private TextView mTvBtnItem1Text;

	/** 第二个按钮 */
	private RelativeLayout mRlBtnItem2;
	/** 第二个按钮中的图标 */
//	private ImageView mIvBtnItem2Icon;
	/** 第二个按钮中的文字 */
	private TextView mTvBtnItem2Text;

	/** 第三个按钮 */
	private RelativeLayout mRlBtnItem3;
	/** 第三个按钮中的图标 */
//	private ImageView mIvBtnItem3Icon;
	/** 第三个按钮中的文字 */
	private TextView mTvBtnItem3Text;

	/** 按钮点击事件回调 */
	private SelectBtnCallBack mSelectBtnCallBack;

	/**
	 * 按钮点击事件回调
	 * 
	 * @ClassName SelectCallBack
	 * @Function TODO ADD FUNCTION
	 * @Reason TODO ADD REASON
	 * 
	 * @author HuangYK
	 * @version v1.1
	 * @Date 2014-4-17 下午2:32:01
	 * 
	 * @see
	 */
	public interface SelectBtnCallBack {

		/**
		 * 第一个（上面的）按钮点击事件
		 * 
		 * <br>
		 * Created 2014-5-5 下午2:30:13
		 * 
		 * @param type
		 *            类型
		 * @author : HuangYK
		 */
		void onButton1(int type);

		/**
		 * 第二个（三个按钮时为中间的，两个按钮时为底部的）按钮点击事件
		 * 
		 * <br>
		 * Created 2014-5-5 下午2:30:06
		 * 
		 * @param type
		 *            类型
		 * @author : HuangYK
		 */
		void onButton2(int type);

		/**
		 * 第三个（最底部按钮）点击事件
		 * 
		 * <br>
		 * Created 2014-5-5 下午2:29:59
		 * 
		 * @param type
		 *            类型
		 * @author : HuangYK
		 */
		void onButton3(int type);

	}

	/**
	 * 实例化CommonSelectDialog
	 * 
	 * @param activity
	 *            上下文
	 * @param theme
	 *            主题样式
	 * @param type
	 *            类型 {@link #TYPE_SELECT_PICTURE} or {@link #TYPE_SELECT_RADIO}
	 *            or {@link #TYPE_THREE_BUTTON}
	 */
	public CommonSelectDialog(Activity activity, int theme, int type) {
		super(activity, theme);
		setContentView(R.layout.common_select_dialog);
		mType = type;
		initView();
		initEvent();
	}

	/**
	 * 设置对话框按钮点击事件回调（必须设置，除非不想监听）
	 * 
	 * <br>
	 * Created 2014-5-5 下午2:29:14
	 * 
	 * @param selectBtnCallBack
	 *            对话框点击回调事件
	 * @author : HuangYK
	 */
	public void setSelectBtnCallBack(SelectBtnCallBack selectBtnCallBack) {
		mSelectBtnCallBack = selectBtnCallBack;
	}

	/**
	 * 设置Title文字
	 * 
	 * <br>
	 * Created 2014-5-5 下午2:29:05
	 * 
	 * @param text
	 *            文字或资源id
	 * @author : HuangYK
	 */
	public void setTitleText(Object text) {
		// 不做特殊判断，不允许出错
		// String处理
		if (text instanceof String) {
			String str = (String) text;
			if (!TextUtils.isEmpty(str)) {
				mTvTitle.setText(str);
			}
			return;
		}
		// ID处理
		if (text instanceof Integer) {
			int strId = (Integer) text;
			if (strId != -1) {
				mTvTitle.setText(strId);
			}
			return;
		}
	}

//	/**
//	 * 设置默认选中（仅单选类型下需要设置，默认勾选哪一个）
//	 * 
//	 * <br>
//	 * Created 2014-5-5 下午2:28:49
//	 * 
//	 * @param checked
//	 *            默认选中 0或1
//	 * @author : HuangYK
//	 */
//	public void setNormalChecked(int checked) {
//		// 0表示默认选中上面第一个，否则下面第二个
//
//		switch (checked) {
//		case 0:
//			mIvBtnItem1Icon.setVisibility(View.VISIBLE);
//			mIvBtnItem2Icon.setVisibility(View.INVISIBLE);
//			break;
//		case 1:
//			mIvBtnItem1Icon.setVisibility(View.INVISIBLE);
//			mIvBtnItem2Icon.setVisibility(View.VISIBLE);
//			break;
//		default:
//			mIvBtnItem1Icon.setVisibility(View.INVISIBLE);
//			mIvBtnItem2Icon.setVisibility(View.INVISIBLE);
//			break;
//		}
//	}

	/**
	 * 设置上面第一个按钮的文字
	 * 
	 * <br>
	 * Created 2014-5-5 下午2:28:38
	 * 
	 * @param text
	 *            文字或资源id
	 * @author : HuangYK
	 */
	public void setBtn1Text(Object text) {
		// 不做特殊判断，不允许出错
		// String处理
		if (text instanceof String) {
			String str = (String) text;
			if (!TextUtils.isEmpty(str)) {
				mTvBtnItem1Text.setText(str);
			}
			return;
		}
		// ID处理
		if (text instanceof Integer) {
			int strId = (Integer) text;
			if (strId != -1) {
				mTvBtnItem1Text.setText(strId);
			}
			return;
		}
	}

	/**
	 * 设置上面第二个按钮的文字
	 * 
	 * <br>
	 * Created 2014-5-5 下午2:28:30
	 * 
	 * @param text
	 *            文字或资源id
	 * @author : HuangYK
	 */
	public void setBtn2Text(Object text) {
		// 不做特殊判断，不允许出错
		// String处理
		if (text instanceof String) {
			mTvBtnItem2Text.setText((String) text);
			return;
		}
		// ID处理
		if (text instanceof Integer) {
			mTvBtnItem2Text.setText((Integer) text);
			return;
		}
	}

	/**
	 * 设置上面第三个按钮的文字
	 * 
	 * <br>
	 * Created 2014-5-5 下午2:28:19
	 * 
	 * @param text
	 *            文字或资源id
	 * @author : HuangYK
	 */
	public void setBtn3Text(Object text) {
		// 不做特殊判断，不允许出错
		// String处理
		if (text instanceof String) {
			mTvBtnItem3Text.setText((String) text);
			return;
		}
		// ID处理
		if (text instanceof Integer) {
			mTvBtnItem3Text.setText((Integer) text);
			return;
		}
	}

//	/**
//	 * 设置下面第一个按钮的图标
//	 * 
//	 * <br>
//	 * Created 2014-5-5 下午2:28:11
//	 * 
//	 * @param resId
//	 *            资源id
//	 * @author : HuangYK
//	 */
//	public void setBtn1Icon(int resId) {
//		mIvBtnItem1Icon.setBackgroundResource(resId);
//	}
//
//	/**
//	 * 设置下面第二个按钮的图标
//	 * 
//	 * <br>
//	 * Created 2014-5-5 下午2:28:04
//	 * 
//	 * @param resId
//	 *            资源id
//	 * @author : HuangYK
//	 */
//	public void setBtn2Icon(int resId) {
//		mIvBtnItem2Icon.setBackgroundResource(resId);
//	}
//
//	/**
//	 * 设置下面第三个按钮的图标
//	 * 
//	 * <br>
//	 * Created 2014-5-5 下午2:27:57
//	 * 
//	 * @param resId
//	 *            资源ID
//	 * @author : HuangYK
//	 */
//	public void setBtn3Icon(int resId) {
//		mIvBtnItem3Icon.setBackgroundResource(resId);
//	}

	/**
	 * 设置第一个按钮的背景为白色的
	 * 
	 * <br>
	 * Created 2014-9-2 下午5:10:21
	 * 
	 * @param resId
	 *            资源ID
	 * @author : HuangYK
	 */
	public void setBtn1WhiteBackground() {
		mRlBtnItem1
				.setBackgroundResource(R.drawable.common_select_dlg_btn_white);
		mTvBtnItem1Text.setTextColor(getContext().getResources().getColor(
				R.color.common_select_dlg_btn_text_white));
	}

	/**
	 * 设置第一个按钮的背景为粉色的
	 * 
	 * <br>
	 * Created 2014-9-2 下午5:10:21
	 * 
	 * @param resId
	 *            资源ID
	 * @author : HuangYK
	 */
	public void setBtn1PinkBackground() {
		mRlBtnItem1
				.setBackgroundResource(R.drawable.common_select_dlg_btn_pink);
		mTvBtnItem1Text.setTextColor(getContext().getResources().getColor(
				R.color.white));
	}

	/**
	 * 设置第一个按钮的背景为白色的
	 * 
	 * <br>
	 * Created 2014-9-2 下午5:10:21
	 * 
	 * @param resId
	 *            资源ID
	 * @author : HuangYK
	 */
	public void setBtn2WhiteBackground() {
		mRlBtnItem2
				.setBackgroundResource(R.drawable.common_select_dlg_btn_white);
		mTvBtnItem2Text.setTextColor(getContext().getResources().getColor(
				R.color.common_select_dlg_btn_text_white));
	}

	/**
	 * 设置第一个按钮的背景为粉色的
	 * 
	 * <br>
	 * Created 2014-9-2 下午5:10:21
	 * 
	 * @param resId
	 *            资源ID
	 * @author : HuangYK
	 */
	public void setBtn2PinkBackground() {
		mRlBtnItem2
				.setBackgroundResource(R.drawable.common_select_dlg_btn_pink);
		mTvBtnItem2Text.setTextColor(getContext().getResources().getColor(
				R.color.white));
	}

	/**
	 * 设置第一个按钮的背景为白色的
	 * 
	 * <br>
	 * Created 2014-9-2 下午5:10:21
	 * 
	 * @param resId
	 *            资源ID
	 * @author : HuangYK
	 */
	public void setBtn3WhiteBackground() {
		mRlBtnItem3
				.setBackgroundResource(R.drawable.common_select_dlg_btn_white);
		mTvBtnItem3Text.setTextColor(getContext().getResources().getColor(
				R.color.common_select_dlg_btn_text_white));
	}

	/**
	 * 设置第一个按钮的背景为粉色的
	 * 
	 * <br>
	 * Created 2014-9-2 下午5:10:21
	 * 
	 * @param resId
	 *            资源ID
	 * @author : HuangYK
	 */
	public void setBtn3PinkBackground() {
		mRlBtnItem3
				.setBackgroundResource(R.drawable.common_select_dlg_btn_pink);
		mTvBtnItem3Text.setTextColor(getContext().getResources().getColor(
				R.color.white));
	}

	/**
	 * 是否显示标题
	 * 
	 * <br>
	 * Created 2014-5-5 下午2:27:47
	 * 
	 * @param isShow
	 *            true：显示，false：不显示
	 * @author : HuangYK
	 */
	public void isShowTitle(boolean isShow) {
		if (isShow) {
			mRlDlgTitle.setVisibility(View.VISIBLE);
		} else {
			mRlDlgTitle.setVisibility(View.GONE);
		}
	}

	/**
	 * 是否显示第一个按钮
	 * 
	 * <br>
	 * Created 2014-5-5 下午2:27:37
	 * 
	 * @param isShow
	 *            true：显示，false：不显示
	 * @author : HuangYK
	 */
	public void isShowBtnItem1(boolean isShow) {
		if (isShow) {
			mRlBtnItem1.setVisibility(View.VISIBLE);
		} else {
			mRlBtnItem1.setVisibility(View.GONE);
		}
	}

	/**
	 * 是否显示第二个按钮
	 * 
	 * <br>
	 * Created 2014-6-6 下午5:30:21
	 * 
	 * @param isShow
	 *            true：显示，false：不显示
	 * @author : HuangYK
	 */
	public void isShowBtnItem2(boolean isShow) {
		if (isShow) {
			mRlBtnItem2.setVisibility(View.VISIBLE);
		} else {
			mRlBtnItem2.setVisibility(View.GONE);
		}
	}

	/**
	 * 是否显示第三个按钮
	 * 
	 * <br>
	 * Created 2014-5-5 下午2:26:43
	 * 
	 * @param isShow
	 *            true：显示，false：不显示
	 * @author : HuangYK
	 */
	public void isShowBtnItem3(boolean isShow) {
		if (isShow) {
			mRlBtnItem3.setVisibility(View.VISIBLE);
		} else {
			mRlBtnItem3.setVisibility(View.GONE);
		}
	}

	/**
	 * 初始化视图
	 * 
	 * <br>
	 * Created 2014-5-5 下午2:26:37
	 * 
	 * @author : HuangYK
	 */
	private void initView() {
		// 设置对话框横向充满，垂直自适应并居底部
		Window mWindow = this.getWindow();
		mWindow.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
		mWindow.setGravity(Gravity.BOTTOM);

		mRlDlgTitle = (RelativeLayout) findViewById(R.id.rlDlgTitle);
		mTvTitle = (TextView) findViewById(R.id.tvTitle);

		mRlBtnItem1 = (RelativeLayout) findViewById(R.id.rlBtnItem1);
//		mIvBtnItem1Icon = (ImageView) findViewById(R.id.ivBtnItem1Icon);
		mTvBtnItem1Text = (TextView) findViewById(R.id.tvBtnItem1Text);

		mRlBtnItem2 = (RelativeLayout) findViewById(R.id.rlBtnItem2);
//		mIvBtnItem2Icon = (ImageView) findViewById(R.id.ivBtnItem2Icon);
		mTvBtnItem2Text = (TextView) findViewById(R.id.tvBtnItem2Text);

		// 如果是选择图片类型，默认设置

		switch (mType) {
		case TYPE_SELECT_PICTURE:
			mRlBtnItem1.setGravity(Gravity.CENTER);
			mTvBtnItem1Text.setText(R.string.select_from_album);
//			mIvBtnItem1Icon.setVisibility(View.GONE);

			mRlBtnItem2.setGravity(Gravity.CENTER);
			mTvBtnItem2Text.setText(R.string.now_shooting);
//			mIvBtnItem2Icon.setVisibility(View.GONE);
			break;

		case TYPE_SELECT_RADIO:
//			mIvBtnItem1Icon
//					.setBackgroundResource(R.drawable.common_ic_check_white);
//			mIvBtnItem2Icon
//					.setBackgroundResource(R.drawable.common_ic_check_white);
			break;

		case TYPE_THREE_BUTTON:
			mRlBtnItem3 = (RelativeLayout) findViewById(R.id.rlBtnItem3);
			mTvBtnItem3Text = (TextView) findViewById(R.id.tvBtnItem3Text);
//			mIvBtnItem3Icon = (ImageView) findViewById(R.id.ivBtnItem3Icon);
//			mIvBtnItem1Icon.setVisibility(View.GONE);
//			mIvBtnItem2Icon.setVisibility(View.GONE);
//			mIvBtnItem3Icon.setVisibility(View.GONE);
			break;
		default:
			break;

		}
		setTitleTypeface(StarAppConst.getInstance().getLTXTypeface(), true);
		setBtnTypeface(StarAppConst.getInstance().getLTXTypeface(), true);
	}

	/**
	 * 设置标题字体
	 * 
	 * <br>
	 * Created 2014-8-13 下午7:29:40
	 * 
	 * @param typeface
	 *            字体
	 * @param isBlor
	 *            是否粗体
	 * @author : HuangYK
	 */
	public void setTitleTypeface(Typeface typeface, boolean isBlod) {
        StarAppUtils.setViewTypeFace(mTvTitle, isBlod);
//        mTvTitle.setTypeface(typeface);
//		if (isBlod) {
//			mTvTitle.getPaint().setFakeBoldText(true);
//		}
	}

	/**
	 * 设置按钮字体
	 * 
	 * <br>
	 * Created 2014-8-13 下午7:31:47
	 * 
	 * @param typeface
	 *            字体
	 * @param isBlod
	 *            是否粗体
	 * @author : HuangYK
	 */
	public void setBtnTypeface(Typeface typeface, boolean isBlod) {
        StarAppUtils.setViewTypeFace(mTvBtnItem1Text, isBlod);
        StarAppUtils.setViewTypeFace(mTvBtnItem2Text, isBlod);
        StarAppUtils.setViewTypeFace(mTvBtnItem3Text, isBlod);
	}

	/**
	 * 初始化数据
	 * 
	 * <br>
	 * Created 2014-5-5 下午2:30:32
	 * 
	 * @author : HuangYK
	 */
	private void initEvent() {
		mRlBtnItem1.setOnClickListener(mOnClickListener);
		mRlBtnItem2.setOnClickListener(mOnClickListener);
		if (mRlBtnItem3 != null) {
			mRlBtnItem3.setOnClickListener(mOnClickListener);
		}
	}

	/**
	 * 点击事件监听
	 */
	private View.OnClickListener mOnClickListener = new View.OnClickListener() {

		@Override
		public void onClick(View v) {
			final int vId = v.getId();
			if (vId == R.id.rlBtnItem1) {
				// 第一个按钮的点击事件
				if (mSelectBtnCallBack != null) {
					if (TYPE_SELECT_PICTURE == mType) {
						mSelectBtnCallBack.onButton2(mType);
					}else{
						mSelectBtnCallBack.onButton1(mType);
					}
				}
				cancel();
				return;
			}
			if (vId == R.id.rlBtnItem2) {
				// 第二个按钮的点击事件
				if (mSelectBtnCallBack != null) {
					if (TYPE_SELECT_PICTURE == mType) {
						mSelectBtnCallBack.onButton1(mType);
					}else{
						mSelectBtnCallBack.onButton2(mType);
					}
				}
				cancel();
				return;
			}
			if (vId == R.id.rlBtnItem3) {
				// 第三个按钮的点击事件
				if (mSelectBtnCallBack != null) {
					mSelectBtnCallBack.onButton3(mType);
				}
				cancel();
				return;
			}
		}
	};

}
